Ejemplo 1:
from typing import List, Optional def myfunc() -> List[Optional[str]]: some_list = [x for x in "abc"] return some_listMypy se queja del ejemplo 1:
Tipo de valor devuelto incompatible (se obtuvo "Lista[str]", se esperaba "Lista[Opcional[str]]")
Sin embargo, este ejemplo no recibe ninguna queja :
Ejemplo 2:
def myfunc() -> List[Optional[str]]: some_list = [x for x in "abc"] return list(some_list)¿Cuál es la explicación del comportamiento inconsistente?
Ya que en Python las listas son invariantes (ver los ejemplos aquí y aquí ).
Si le pasamos List[str] a alguien que espera List[Optional[str]] , esa persona puede agregar None a nuestra lista y romper nuestras suposiciones. Sin embargo, el segundo ejemplo es válido ya que la salida de list() en la declaración de devolución no se guarda en ningún lugar y nadie puede depender de que el valor devuelto se mute ilegalmente.